"""
1、和java语言不通，python的成员变量不需要提前声明也不要声明格式
2、对成员变量做出修改不会改变成员变量在内存地址里面的值（改）
3、新增成员变量可以通过p.atrribute=值（attribute表示变量）来做赋值（增）
4.可以通过__dict__来查询这个变量的字典（这个变量的全部内容），__class__来查看这个对象的类型（查）
5.删除某个成员变量可以通过del的方法来实现（del.p.键值）（删）

1.写一个标准的class文件应该有注释具体格式见format.py
2、实例方法（instance method）：实例方法会把调用它的对象作为第一个变量传递回方法里面，这个变量叫做self
3、类方法 （class method）:类方法会把调用它的对象所在的类，或者调用它的类作为第一个变量传递回方法里面，这个变量叫做cls
4、静态方法 （static method）：静态方法不需要对象或者类的调用就可以直接运行，当然用对象或者类调用也能执行
如何区分这三种方法？ 通过这个函数的第一个变量来做判断，如果这个函数第一个传回的变量是一个对象，那么就是实例方法，如果是一个类，那么就是类方法，如果不需要对象或者类调用就是静态方法

1.实例方法作用的对象是引用它的实例
2.如果你需要对一个class文件里面的成员变量做出修改那么请使用类方法做出修改
3.当你不需要使用一个对象或者实例就想使用这个方法（这个方法不涉及到任何的成员变量你可以使用静态方法


创建一个类（自拟）
给这个类创建3个成员变量（自拟）
为这个类添加3个方法分别为实例方法 静态 类方法
创建3个对象，
对象1用来实现成员变量的赋值
对象2用来调用类方法
对象3用来调用实例方法

"""


class Person:
    # 类变量
    tribe = "汉"

    def __init__(self, name, age, gender):
        # 成员变量
        self.name = name
        self.age = age
        self.gender = gender

    # 实例方法
    def introduce(self):
        return f"你好，我叫{self.name}, 今年：{self.age}岁，性别为：{self.gender}."

    # 静态方法
    @staticmethod
    def is_adult(age):
        return age >= 18

    # 类方法
    @classmethod
    def describe_tribe(cls):
        return f"我们都是{cls.tribe}族人."

# 创建3个对象
# 对象1用来实现成员变量的赋值
person1 = Person("方小晓", 25, "女")
print(person1.introduce())

# 对象2用来调用类方法
print(Person.describe_tribe())

# 对象3用来调用实例方法
person3 = Person("林见清", 26, "男")
print(person3.introduce())

# 调用静态方法
print(Person.is_adult(30))  # 输出：True